home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 12, No. 03 (1991-03)(MindCraft Publishing)(Side A)[a].zip / Nibble Volume 12, No. 03 (1991-03)(MindCraft Publishing)(Side A)[a].po / DOUBLE.DUMP.S < prev    next >
Text File  |  1996-12-24  |  4KB  |  117 lines

  1. ****************************
  2. *       DOUBLE.DUMP        *
  3. * 40/80 COLUMN SCREEN DUMP *
  4. *   by James E. Trudeau    *
  5. *   Copyright (C)  1991    *
  6. * by MindCraft Publ. Corp. *
  7. *   Concord, MA  01742     *
  8. ****************************
  9. * Merlin Assembler         *
  10. ****************************
  11.           ORG $300
  12.  
  13. LINE      = $FD          ;count lines on screen
  14. CV        = $25          ;cursor vertical
  15. BASL      = $28          ;holds screen address
  16. CSWL      = $36          ;output hook low byte
  17. CSWH      = $37          ;output hook high byte
  18. RDTEXT    = $C01A        ;read text mode
  19. RDALTCHR  = $C01E        ;character set
  20. RD80COL   = $C01F        ;80 column card status
  21. PAGE1     = $C054        ;page 1 softswitch
  22. PAGE1X    = $C055        ;page 1X softswitch
  23. TABV      = $FB5B        ;get screen address
  24. IDBYTE    = $FBC0        ;$EA = original IIe
  25. CROUT     = $FD8E        ;output carriage return
  26. COUT      = $FDED        ;output character
  27. IOREST    = $FF3F        ;restore registers
  28. IOSAVE    = $FF4A        ;save registers
  29.  
  30.  
  31.           JSR IOSAVE     ;save registers
  32.           BIT RDTEXT     ;are we in text mode?
  33.           BPL RESTORE    ;no, then out
  34.           LDA CV
  35.           PHA            ;save cursor position
  36.           LDA CSWH       ;save CSW on stack
  37.           PHA
  38.           LDA CSWL
  39.           PHA
  40.           LDX #$C1       ;for slot 1
  41.           STX CSWH       ;put in CSW
  42.           LDX #0         ;low byte
  43.           STX CSWL
  44.           STX LINE       ;zero line counter
  45. INITPTR   INX
  46.           LDA PTRINIT-1,X ;init parallel printer
  47.           BEQ SCRNLOOP   ;done
  48.           JSR COUT
  49.           BNE INITPTR    ;get next character
  50. SCRNLOOP  JSR TABV       ;get screen address
  51.           LDY #00        ;counter to zero
  52. LINELOOP  BIT RD80COL    ;is 80 column card on?
  53.           BPL COL40      ;no, then skip page 1X
  54.           BIT PAGE1X     ;turn on page 1X
  55.           LDA (BASL),Y   ;get byte from page 1X
  56.           PHP            ;save status
  57.           BIT PAGE1      ;turn on page 1
  58.           PLP            ;restore status
  59.           JSR DOBYTE     ;process the byte
  60. COL40     LDA (BASL),Y   ;get byte from page 1
  61.           JSR DOBYTE     ;process the byte
  62.           INY            ;increment counter
  63.           CPY #40        ;done 40/80 characters?
  64.           BCC LINELOOP   ;no, do the next
  65.           JSR CROUT
  66.           INC LINE       ;increment line counter
  67.           LDA LINE
  68.           CMP #24        ;done 24 lines?
  69.           BCC SCRNLOOP   ;loop till done
  70. *
  71. * Restore system
  72. *
  73.           PLA
  74.           STA CSWL       ;restore CSW
  75.           PLA
  76.           STA CSWH
  77.           PLA            ;get cursor location
  78.           TAX
  79.           DEX
  80.           BEQ CURSOR     ;at top of screen
  81.           DEX
  82. CURSOR    STX CV         ;restore cursor
  83. RESTORE   JMP IOREST     ;restore registers
  84.                          ;return from there
  85. *
  86. * Transform byte for printer
  87. *
  88. DOBYTE    BMI HIBIT      ;high bit ascii
  89.           BIT RDALTCHR   ;alternate characters?
  90.           BPL MAINCHAR   ;no
  91.           LDX IDBYTE     ;check identity
  92.           CPX #$EA       ;unenhanced IIe?
  93.           BEQ SETHIBIT   ;yes, then set high bit
  94.           CMP #$40       ;@ thru ? inverse
  95.           BLT MAINCHAR   ;same as ROM characters
  96.           CMP #$60       ;lower case inverse
  97.           BLT SPACE      ;mousetext
  98. SETHIBIT  ORA #$80       ;set high bit
  99. HIBIT     CMP #$FF       ;delete character?
  100.           BEQ SPACE      ;don't send that
  101.           CMP #$A0       ;control character?
  102.           BGE SENDIT     ;no, then it's okay
  103. SPACE     LDA #$A0       ;send a space instead
  104.           BMI SENDIT     ;always taken
  105. MAINCHAR  ORA #$C0       ;ascii in range $C0-$FF
  106.           CMP #$E0
  107.           BLT SENDIT     ;$C0-DF, @ to underline
  108.           EOR #$40       ;$A0-BF, space to ?
  109. SENDIT    JSR COUT
  110.           RTS
  111. *
  112. * Parallel printer initialization code
  113. *
  114. PTRINIT   HEX 89         ;ctrl-I
  115.           ASC "80N"
  116.           HEX 8D00
  117.